import java.util.Date;
import java.util.Scanner;

public class Customer 
{
	private FileIO accountIO = new FileIO();
	private Scanner scan = new Scanner (System.in);
	private Date today = new Date();
	private int menuNum = 0; 

	private Account ownAccount;
	private String accountNum;

	/* Constructor */
	public Customer(Account account){
		ownAccount = account;
		introMessage();
		while (menuNum != 5)
		{
			printMenu();
			isInteger();
			menuNum = Integer.parseInt(scan.nextLine());
			
			switch(menuNum){
				case 1:	 // 계좌 정보 보기(Display your account info)
					displayAccount();
					break;
				case 2:	 // 계좌 정보 수정(Update your account info)
					modifyAccount();
					break;
				case 3:	 // 입금(Debit)
					debitMessage();
					break;
				case 4:	 // 출금(Credit)
					creditMessage();
					break;
				case 5:	 // 계좌 이체(Transfer money)
					transferMessage();
					break;
				// 5 이면 종료(PHIBank에서 처리)
			}// end of switch(menuNum)

		}// end of while (menuNum != 5)
	}// end of Constructor

	/* intro message를 출력한다. */
	public void introMessage(){
		
		System.out.println("");
		System.out.println("Customer Mode: START [ " + today.toString() + " ]");
		System.out.println("안녕하세요! "+ownAccount.getName()+"님 좋은 하루입니다~");
	}


	public void printMenu(){
		System.out.println("");
		System.out.println("원하시는 기능의 번호를 입력한 후 Enter를 눌러주세요!");
		System.out.println("[1] 계좌 정보 보기(Display your account info)");
		System.out.println("[2] 계좌 정보 수정(Update your account info)");
		System.out.println("[3] 입금(Debit)");
		System.out.println("[4] 출금(Credit)");
		System.out.println("[5] 계좌 이체(Transfer credit)");
		System.out.println("[6] 프로그램 종료");
		System.out.println("");
		System.out.print(" > ");
	}
	

	/*[1] 계좌 정보 보기(Display your account info)*/
	public int displayAccount(){
		String display = "";
		display += 	"ID : \t" + ownAccount.getId() + "\n";
		display += 	"PW : \t" + ownAccount.getPw() + "\n";

		// 정보 추가



		
		System.out.println(display);

		return 0;
	}



	/*[2] 계좌 정보 수정(Update your account info)*/
	public int modifyAccount(){
		int subMenuNum;
		do
		{
			printModMenu();
			isInteger();
			subMenuNum = Integer.parseInt(scan.nextLine());
			
			switch(subMenuNum){
				case 1:	 
					// 비밀번호 수정		System.out.println(" 계좌를 생성합니다. 각 항목에 해당하는 정보를 조건에 맞게 입력해주세요. ");
					System.out.println("  *) 상위 메뉴로 돌아가려면 '.'을 입력하세요. ");
					System.out.println("  ---> 원하시는 비밀번호를 입력해주세요.");
					String pw  = scan.nextLine();
					if (pw.equals(".")){
						continue;
					}
					ownAccount.setPw(pw);
					accountIO.accountWrite(ownAccount);
					System.out.println("  ---> 고객님의 비밀번호가 수정되었습니다.");
					break;
				case 2:	 
					//주소 수정






					break;
			}// end of switch(subMenuNum)

		}	while (subMenuNum != 0);
		// end of while
		return 0;
	}
	public void printModMenu(){
		System.out.println("");
		System.out.println("  수정을 원하시는 항목의 번호를 입력한 후 Enter를 눌러주세요!");
		System.out.println("  [0] 상위 메뉴로");
		System.out.println("  [1] 비밀번호(Password)");
		System.out.println("  [2] 주소(Address)");
		System.out.println("");
		System.out.print("   > ");
	}
	
	/*[3] 입금(Debit)*/
	public int debitMessage(){
		System.out.println("---> 입금할 금액을 입력하세요.");
		System.out.print(">> 금액(\\) : " );
		isInteger();
		int value = Integer.parseInt(scan.nextLine());
		int balance = ownAccount.getBalance();
		ownAccount.setBalance(balance + value);
		accountIO.accountWrite(ownAccount);
		System.out.println("---> " + ownAccount.getAccountNum() + "에 " + value +"원이 입금되었습니다.");
		return 0;
	}// end of debit
	
	
	/*[4] 출금(Credit)*/
	public int  creditMessage(){
		System.out.println("---> 출금할 금액을 입력하세요.");
		System.out.print(">> 금액(\\) : " );
		isInteger();
		int value = Integer.parseInt(scan.nextLine());
		int balance = ownAccount.getBalance();
		if (balance < value){
			System.out.println("---> 잔액이 모자랍니다. 거래가 종료됩니다.");
			return 1;
		}
		ownAccount.setBalance(balance - value);
		accountIO.accountWrite(ownAccount);
		System.out.println("---> " + ownAccount.getAccountNum() + "에서 " + value +"원이 출금되었습니다.");
		return 0;
	}// end of creditMessage

	/*[5] 계좌 이체(Transfer credit)*/
	public int transferMessage(){
		System.out.println("*) 상위 메뉴로 돌아가려면 '.'을 입력하세요. ");
		System.out.println("---> 이체할 계좌번호를 입력하세요.");

		System.out.print(">> 계좌번호 : " );
		// Account Number의 유효성 검사 - 추후에 구현
		String accountNum = scan.nextLine();
		if (accountNum.equals(".")){
			return 0;
		}
		System.out.println("---> 이체할 금액을 입력하세요.");
		System.out.print(">> 금액(\\) : " );
		isInteger();
		int value = Integer.parseInt(scan.nextLine());
		Account account = accountIO.accountRead(accountNum);
		int balance = account.getBalance();
		if (ownAccount.getBalance() < value){
			System.out.println("---> 잔액이 모자랍니다. 거래가 종료됩니다.");
			return 1;
		}
		account.setBalance(balance + value);
		ownAccount.setBalance(ownAccount.getBalance() - value);
		accountIO.accountWrite(account);
		accountIO.accountWrite(ownAccount);
		System.out.println("---> [" + accountNum + "]으로 " + value +"원이 이체되었습니다.");
		System.out.println("---> 나의 잔액 : " + (balance - value) + "원");

		return 0;

	}


	public void isInteger(){ 
		while (!scan.hasNextInt()) {
			System.out.println("Please enter a number!");
			scan.nextLine();
		}
	}// end of isInteger



}
